﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Platform.ObjectModel;
using Platform.Storage.Entity;
using Platform.ObjectModel.Design;

namespace Platform.Storage.Impl
{
	/// <summary>
	/// Fornece metadados para a montagem da query que é enviada para o banco de dados
	/// </summary>
	internal interface IQueryResolver
	{
		// TODO : Escolher um nome melhor para esse objeto


		/// <summary>
		/// Obtém a entidade que contém os campos e valores de um documento
		/// </summary>
		IQueryable<FieldValue> Fields
		{ get; }

		/// <summary>
		/// 
		/// </summary>
		IQueryable<DataObjectRelationship> Relations
		{ get; }

		/// <summary>
		/// Obtém o schema que descreve o tipo
		/// </summary>
		/// <param name="entityType"></param>
		/// <returns></returns>
		//Schema GetSchema( Type entityType );
		bool TryGetSchema( Type entityType, out Schema schema );

		/// <summary>
		/// Obtém o nome que identifica o tipo de documento
		/// </summary>
		/// <param name="entityType"></param>
		/// <returns></returns>
		[Obsolete("Utilizar o método \"GetSchema\".")]
		DataObjectName GetDataObjectName( Type entityType );

		/// <summary>
		/// Obtém o nome do campos que representa o identificador único dos documentos 
		/// do tipo <paramref name="entityType"/>.
		/// </summary>
		/// <param name="entityType"></param>
		/// <returns></returns>
		[Obsolete("Utilizar o método \"GetSchema\".")]
		DataObjectName GetFieldKey( Type entityType );
	}
}
